package com.vizhuo.base.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;



/**
 * <pre>
 * 用于调用Mapper.xml的接口
 * 所有写在Mapper.java中的方法名必须与Mapper.xml中的ID一致，
 * 同时严格遵循以下规则：
 * 1、添加：insert开头
 * 2、更新：update开头
 * 3、删除：delete开头
 * 4、查询：select开头
 * </pre>
 * 
 * @author 刘大年
 * 
 * @param <T>
 *            实体对象类型
 */
public interface BaseMapperI<T, U, I> {
    /**
     * 插入新数据，并返回影响数据行数
     * 
     * @param entity
     * @return
     */
    public int insertEntity(T entity);

    /**
     * 更新数据，并返回影响行数
     * 
     * @param entity
     * @return
     */
    public int updateEntity(T entity);

    /**
     * 更新数据业务状态，并返回影响行数
     * 
     * @param entity
     * @return
     */
    public int updateStateEntity(T entity);

    /**
     * 根据ID删除数据
     * 
     * @param id
     * @return
     */
    public int deleteEntityByID(I id);

    /**
     * 根据ID批量删除数据
     * 
     * @param ids
     * @return
     */
    public int deleteEntities(I[] ids);

    /**
     * 根据ID查询一条数据
     * 
     * @param id
     * @return
     */
    public T selectOneEntity(I id);

    /**
     * 条件查询数据，无分页
     * 
     * @param entity
     * @return
     */
    public List<T> selectEntity(U query);

    /**
     * 查询所有对象
     * 
     * @return
     */
    public List<T> selectAllEntity();


}
